home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
TIA_SNW.ZIP
/
SNOW.ASM
< prev
Wrap
Assembly Source File
|
1997-06-14
|
9KB
|
346 lines
;=========================================================
; The snowfield simulator.
;=========================================================
; Hope you like. if you use this code in one of you
; demos or something then please credit me, failing that
; just send me a copy of you program to peruse.
;
; If the instructions in the code look in a really wierd
; order it is becase they have been aranged to take
; advantage of the 486+ Pipeline. If you think my code
; is a bit slack then tell me why.
;
; Code By Jar Jam of TIA
;=========================================================
; _____ _ ___
; |_ _| | | / _ \
; | | | | | |_| |
; | | | | | _ |
; |_|HE |_|NFO |_| |_|SYMILATORS
;
; If you can code, draw, write decent music or can do
; anything else that may be of use to us then apply within
;
; Temporary EMail: JARJAM@AXS.COM.AU
;
;=========================================================
.386
;---------------------------------------------------------
sstack segment stack use16
STACKDATA dw 100 dup (0)
sstack ends
;---------------------------------------------------------
ddata segment use16 public
include pal.dat
max_flake = 40
THE_MESSAGE DB 'The snowfield simulator. Not just a sideways starfield :) '
DB 13,10,'Code: Jacob "JAR JAM" Rhoden, 14/6/97.',13,10,10,10
DB 10,10,10,10,10,10,10,10,10,10,10,10,10,10
DB ' _____ _ ___',13,10
DB ' |_ _| | | / _ \',13,10
DB ' | | | | | |_| |',13,10
DB ' | | | | | _ |',13,10
db ' |_|HE |_|NFO |_| |_|SYMILATORS',13,10
db '$'
layer1_xpos dw 010,020,070,040,260,060,070,280,090,100
dw 110,120,140,160,170,180,190,200,220,310
dw 010,003,140,096,317,204,109,156,191,057
dw 008,123,177,162,033,233,298,250,225,311
layer1_ypos db 010,0, 004,1, 000,2, 024,3, 050,1
db 050,2, 140,2, 130,3, 146,1, 020,0
db 070,3, 170,2, 040,1, 158,1, 164,3
db 002,2, 000,2, 112,3, 004,1, 028,0
db 010,3, 124,2, 054,1, 062,1, 152,3
db 050,2, 174,2, 162,3, 038,1, 132,0
db 080,3, 172,2, 128,1, 076,1, 138,3
db 088,1, 182,0, 146,3, 022,2, 166,1
layer2_xpos dw 010,020,030,040,050,060,070,080,090,100
dw 110,120,130,140,150,160,170,180,190,200
dw 210,220,230,240,250,260,270,280,290,300
dw 310,003,056,075,125,145,196,154,205,304
layer2_ypos db 010,1, 004,0, 000,2, 024,0, 050,3
db 070,3, 180,2, 040,0, 170,1, 160,1
db 002,0, 000,3, 112,1, 004,3, 028,2
db 010,1, 124,0, 054,2, 062,0, 164,3
db 050,2, 140,1, 130,3, 150,1, 020,0
db 050,2, 184,1, 160,3, 038,1, 132,0
db 080,3, 164,2, 128,0, 076,2, 142,1
db 088,0, 180,3, 142,1, 022,3, 166,2
layer3_xpos dw 010,020,070,040,260,060,070,280,090,100
dw 110,120,140,160,170,180,190,200,220,310
dw 010,003,140,096,317,204,109,156,191,057
dw 008,123,177,162,033,233,298,256,225,311
layer3_ypos db 012,1, 004,0, 000,2, 024,0, 052,3
db 072,3, 168,2, 040,0, 168,2, 152,1
db 004,0, 000,3, 112,1, 004,3, 028,2
db 012,1, 124,0, 056,2, 060,0, 160,3
db 048,2, 140,1, 128,3, 148,1, 020,0
db 052,2, 184,1, 164,3, 036,1, 132,0
db 080,3, 172,2, 128,0, 076,2, 140,1
db 088,0, 184,3, 140,1, 024,3, 164,2
label looky word
include look.dat
pallete db 0,0,10
parra db 00,03,63,00,07,63,00,15,63,00,31,63
db 00,31,63,00,15,63,00,07,63,00,03,63
ddata ends
ccode segment use16
assume cs:ccode, ds:ddata, ss:sstack
WAIT_RETRACE PROC NEAR
PUSH DX
MOV DX,3DAH
WR_START:
in al,dx
test al,8
jz WR_START ;wait until Verticle Retrace starts
WR_END:
in al,dx
test al,8
jnz WR_END ;wait until Verticle Retrace Ends
POP DX
RET
WAIT_RETRACE ENDP
show_state3 proc near
mov si,0
show_all3:
mov di,[layer3_xpos+si]
mov bl,[layer3_ypos+si]
mov dl,[layer3_ypos+si+1]
inc dl
cmp dl,4
jne _reanimate3
xor dl,dl
_reanimate3:
add bl,4
cmp bl,188
jne no_refall3
xor bl,bl
no_refall3:
mov [layer3_ypos+si+1],dl
mov [layer3_ypos+si],bl
xor bh,bh
shl bx,1
add di,[looky+bx]
mov ax,1f1fh
cmp dl,1
je do_13
cmp dl,2
je do_23
cmp dl,3
je do_33
do_03:
mov es:[(320*4)+di+0],ax ;1- 110
mov es:[(320*5)+di+1],ax ;2- 011
mov ax,0ffffh
mov es:[(320*1)+di+0],al ;0- 000
mov es:[(320*1)+di+1],ax ;1- 111
jmp short shown_flake3
do_13:
mov es:[(320*5)+di+0],al ;1- 000
mov es:[(320*5)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+0],ax ;0- 110
mov es:[(320*1)+di+1],ax ;1- 011
jmp short shown_flake3
do_23:
mov es:[(320*4)+di+1],ax ;1- 011
mov es:[(320*5)+di+0],ax ;2- 110
mov ax,0ffffh
mov es:[(320*1)+di+2],al ;0- 000
mov es:[(320*1)+di+0],ax ;1- 111
jmp short shown_flake3
do_33:
mov es:[(320*5)+di+0],al ;1- 000
mov es:[(320*5)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+1],ax ;0- 011
mov es:[(320*1)+di+0],ax ;1- 110
shown_flake3:
add si,2
cmp si, max_flake*2
jne show_all3
ret
show_state3 endp
show_state proc near
mov si,0
show_all:
mov di,[layer1_xpos+si]
mov bl,[layer1_ypos+si]
mov dl,[layer1_ypos+si+1]
inc dl
cmp dl,4
jne _reanimate
xor dl,dl
_reanimate:
add bl,2
cmp bl,188
jne no_refall
xor bl,bl
no_refall:
mov [layer1_ypos+si+1],dl
mov [layer1_ypos+si],bl
xor bh,bh
shl bx,1
add di,[looky+bx]
mov ax,1a1ah
cmp dl,1
je do_1
cmp dl,2
je do_2
cmp dl,3
je do_3
do_0:
mov es:[(320*2)+di+0],ax ;1- 110
mov es:[(320*3)+di+1],ax ;2- 011
mov ax,0ffffh
mov es:[(320*1)+di+0],al ;0- 000
mov es:[(320*1)+di+1],ax ;1- 111
jmp short shown_flake
do_1:
mov es:[(320*3)+di+0],al ;1- 000
mov es:[(320*3)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+0],ax ;0- 110
mov es:[(320*1)+di+1],ax ;1- 011
jmp short shown_flake
do_2:
mov es:[(320*2)+di+1],ax ;1- 011
mov es:[(320*3)+di+0],ax ;2- 110
mov ax,0ffffh
mov es:[(320*1)+di+2],al ;0- 000
mov es:[(320*1)+di+0],ax ;1- 111
jmp short shown_flake
do_3:
mov es:[(320*3)+di+0],al ;1- 000
mov es:[(320*3)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+1],ax ;0- 011
mov es:[(320*1)+di+0],ax ;1- 110
shown_flake:
add si,2
cmp si, max_flake*2
jne show_all
ret
show_state endp
show_state2 proc near
mov si,0
show_all2:
mov di,[layer2_xpos+si]
mov bl,[layer2_ypos+si]
mov dl,[layer2_ypos+si+1]
inc dl
cmp dl,4
jne _reanimate2
xor dl,dl
_reanimate2:
inc bl
cmp bl,188
jne no_refall2
xor bl,bl
no_refall2:
mov [layer2_ypos+si+1],dl
mov [layer2_ypos+si],bl
xor bh,bh
shl bx,1
add di,[looky+bx]
mov ax,1515h
cmp dl,1
je do_12
cmp dl,2
je do_22
cmp dl,3
je do_32
do_02:
mov es:[(320*1)+di+0],ax ;1- 110
mov es:[(320*2)+di+1],ax ;2- 011
mov ax,0ffffh
; mov es:[(320*1)+di+0],al ;0- 000
mov es:[(320*1)+di+2],al ;1- 111
jmp short shown_flake2
do_12:
mov es:[(320*2)+di+0],al ;1- 000
mov es:[(320*2)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+0],ax ;0- 110
mov es:[(320*1)+di+1],ax ;1- 011
jmp short shown_flake2
do_22:
mov es:[(320*1)+di+1],ax ;1- 011
mov es:[(320*2)+di+0],ax ;2- 110
mov ax,0ffffh
; mov es:[(320*1)+di+0],al ;0- 000
mov es:[(320*1)+di+0],al ;1- 111
jmp short shown_flake2
do_32:
mov es:[(320*2)+di+0],al ;1- 000
mov es:[(320*2)+di+1],ax ;2- 111
mov ax,0ffffh
mov es:[(320*0)+di+1],ax ;0- 011
mov es:[(320*1)+di+0],ax ;1- 110
shown_flake2:
add si,2
cmp si, max_flake*2
jne show_all2
ret
show_state2 endp
start proc near
mov ax,ddata
mov ds,ax
mov es,ax
mov ax,013h
int 010h
mov si,0a000h
MOV DX,OFFSET PALLETE ; ES:DX pooint to palette data
MOV AX,01012h ; WRITE palette
MOV BX,0ffh ; do colour 255
MOV CX,1 ; and write 1 colour
INT 10h
mov es,si
xor di,di
mov cx,160*190
mov ax,0ffffh
rep stosw
mov di,320*190
mov cx,160*12
mov ax,0202h
rep stosw
MAIN_loop:
CALL WAIT_RETRACE
call show_state2
CALL WAIT_RETRACE
call show_state
CALL WAIT_RETRACE
call show_state3
mov ah,1
int 016h
jnz _exit
jmp main_loop
_EXIT:
XOR AX,AX
INT 016h
MOV AX,03
INT 010h
MOV DX,OFFSET THE_MESSAGE
MOV AH,9
INT 021h
MOV AX,04C00h
INT 021h
START ENDP
ccode ends
end start